﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed

#pragma once
#include "GcmpUiViewInterface.h"
#include "IEventArgs.h"


namespace gcmp
{
    /// \brief UiDocumentEventType 定义UiDocument事件类型。
    enum class UiDocumentEventType : int32_t
    {
        PreUiDocumentActivate,    ///< 当前工作文档激活前触发此事件。一般由新建文档或切换视图窗口导致。在同一文档的多个不同视图间切换，不会触发此事件。
        UiDocumentActivated,      ///< 当前工作文档激活后触发此事件。一般由新建文档或切换视图窗口导致。在同一文档的多个不同视图间切换，不会触发此事件。
        PreUiDocumentDeactivate,  ///< 当前工作文档被切换前触发此事件。一般由切换或关闭当前工作文档导致。
        UiDocumentDeactivated,    ///< 当前工作文档被切换后触发此事件。一般由切换或关闭当前工作文档导致。
        PreUiDocumentClose,       ///< 文档被关闭前触发此事件。
        UiDocumentClosed,         ///< 文档被关闭后触发此事件。
        PreUpdateUiView            ///< 刷新视图之前触发此事件，该事件会频繁调用，请勿在此事件类型中调用耗时操作
    };



    class IUiDocument;
    
    
    /// \brief UiDocument类事件的参数接口。
    class GCMP_UI_VIEW_INTERFACE_EXPORT IUiDocumentEventArgs : public IEventArgs
    {
        DEFINE_CAST_DERIVED(gcmp::IUiDocumentEventArgs, gcmp::IEventArgs)

    public:
        /// \brief 获取UiDocument事件类型。
        /// 
        /// \return 返回UiDocument事件类型。
        virtual UiDocumentEventType GetType() const = 0;

        /// \brief 获取UiDocument对象指针。
        /// 
        /// \return 返回UiDocument对象指针。
        virtual IUiDocument* GetUiDocument() = 0;

        /// \brief 判断视图刷新类型。对应UiDocumentEventType::PreUpdateView事件。
        /// 
        /// \return 返回值表示视图刷新类型。返回true表示视图是增量刷新；返回false表示不是增量刷新。 
        virtual bool IsIncrementallyUpdateView() = 0;
    };

}

